package dao;

import org.apache.ibatis.annotations.*;
import pojo.Zzjl;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
/**
 * 症状记录表数据访问接口
 */
public interface ZzjlMapper {
    // 根据id查询症状记录
    @Select("SELECT id, yh_id, zz_id, record_time, note FROM zzjl WHERE id = #{id}")
    Zzjl findZzjlById(Integer id);

    // 查询用户的症状记录（关联症状表）
    @Select("SELECT " +
            "zzjl.id, zzjl.yh_id, zzjl.zz_id, zzjl.record_time, zzjl.note, " +
            "zz.name AS zzName, zz.description AS zzDescription " +
            "FROM zzjl " +
            "JOIN zz ON zzjl.zz_id = zz.id " +
            "WHERE zzjl.yh_id = #{yhId} " +
            "ORDER BY zzjl.record_time DESC")
    List<Zzjl> findByYhId(Integer yhId);

    // 查询用户指定时间段的症状记录
    @Select("SELECT " +
            "zzjl.id, zzjl.yh_id, zzjl.zz_id, zzjl.record_time, zzjl.note, " +
            "zz.name AS zzName " +
            "FROM zzjl " +
            "JOIN zz ON zzjl.zz_id = zz.id " +
            "WHERE zzjl.yh_id = #{yhId} " +
            "AND zzjl.record_time BETWEEN #{startTime} AND #{endTime} " +
            "ORDER BY zzjl.record_time DESC")
    List<Zzjl> findByTimeRange(
            @Param("yhId") Integer yhId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime
    );

    // 新增症状记录（使用数据库默认时间）
    @Insert("INSERT INTO zzjl (yh_id, zz_id, note) " +
            "VALUES (#{yhId}, #{zzId}, #{note})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int add(Zzjl zzjl);

    // 更新症状记录
    @Update("UPDATE zzjl SET note = #{note} WHERE id = #{id}")
    int update(Zzjl zzjl);

    // 删除症状记录
    @Delete("DELETE FROM zzjl WHERE id = #{id}")
    int deleteById(Integer id);

    // 删除用户的症状记录
    @Delete("DELETE FROM zzjl WHERE yh_id = #{yhId}")
    int deleteByYhId(Integer yhId);
}